/**
 * Alipay.com Inc.
 * Copyright (c) 2004-2016 All Rights Reserved.
 */
package com.maple.retry.retrytask.util;

/**
 * 补偿任务摘要日志工具类
 *
 * @author dengzun.dz
 * @version $Id: CompensateTaskDigestLogUtil.java, v 0.1 2016/12/15 下午5:36 dengzun.dz Exp $
 */
public class RetryTaskDigestLogUtil {

    /** 摘要日志的内容分隔符 */
    private static final String SEP           = ",";

    /** 摘要日志中NULL内容的替代福 */
    private static final String NULL_REPLACE  = "-";


    /**
     * 生成补偿任务生命周期摘要日志,包括create,process,abort
     *
     * @param method       执行方法名
     * @param elapseTime   方法耗时, 单位为毫秒
     * @param success      是否执行成功
     * @param bizId        补偿任务bizId,如果有多条,用*代替
     * @param bizType      补偿任务类型
     * @return 摘要日志字符串
     */
    public static String buildLifecycleDigestLog(String method, long elapseTime, boolean success,
                                                 String bizId,
                                                 String bizType) {

        StringBuffer sb = new StringBuffer("[");

        // 执行方法名
        sb.append(method).append(SEP);

        // 补偿任务类型
        sb.append(bizType).append(SEP);

        // 补偿任务bizId
        sb.append(bizId == null ? NULL_REPLACE :bizId).append(SEP);

        // 是否执行成功
        sb.append(success ? 'Y' : 'N').append(SEP);

        // 方法耗时
        sb.append(elapseTime).append("ms");

        sb.append("]");
        return sb.toString();
    }

    /**
     * 具体每一个补偿任务执行摘要日志
     *
     * @param elapseTime  执行时间
     * @param success     是否成功
     * @param bizId       补偿任务bizId
     * @param bizType     补偿任务业务类型
     * @param status      补偿任务状态
     * @param forever     是否永远重试
     * @param retryNo     重试次数
     * @return            摘要日志字符串
     */
    public static String buildProcessDigestLog(long elapseTime, boolean success,
                                               String bizId,
                                               String bizType, String status, boolean forever, String retryNo){
        StringBuffer sb = new StringBuffer("[");

        // 补偿任务类型
        sb.append(bizType).append(SEP);

        // 补偿任务bizId
        sb.append(bizId == null ? NULL_REPLACE :bizId).append(SEP);

        // 是否执行成功
        sb.append(success ? 'Y' : 'N').append(SEP);

        // 是否永远调度
        sb.append(forever ? 'Y' : 'N').append(SEP);

        // 重试次数
        sb.append(retryNo).append(SEP);

        // 方法耗时
        sb.append(elapseTime).append("ms");

        sb.append("]");
        return sb.toString();
    }
}
